home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.1 (Developer) [x86] / NeXT Step 3.1 Intel dev.cdr.dmg / NextDeveloper / Makefiles / app / common.make < prev    next >
Text File  |  1993-04-12  |  11KB  |  326 lines

  1. ###############################################################################
  2. #  NeXT common.make
  3. #  Copyright 1992, NeXT Computer, Inc.
  4. #
  5. #  This makefile is common to all project-types (apps, subprojects,
  6. #  bundles, and palettes).  It can also prove useful to custom Makefiles
  7. #  needing generic project-building functionality, but users should be aware
  8. #  that interfaces supported at this level are private to the app makefiles
  9. #  and may change from release to release.
  10. #  
  11. ###############################################################################
  12.  
  13.  
  14. all::
  15.  
  16. SUPPORTFILES = IB.nproj Makefile makefile $(NAME).iconheader \
  17.     Makefile.preamble Makefile.postamble *.project SGS_ENV
  18.  
  19. SRCFILES = $(CLASSES) \
  20.     $(MFILES) $(CFILES) $(CCFILES) $(CAPCFILES) $(CXXFILES) $(CPPFILES) \
  21.     $(HFILES) $(PSWFILES) $(PSWMFILES) $(DBMODELAFILES) \
  22.     $(GLOBAL_RESOURCES) \
  23.     $(OTHERSRCS) $(OTHERLINKED) $(OTHER_SOURCEFILES)
  24.  
  25. ### Compute all the possible derived files and directories for them:
  26.  
  27. # Defaults for NeXT-specific Release Control options
  28. SRCROOT = .
  29. SYMROOT = .
  30. OBJROOT = .
  31. RC_ARCHS = `/usr/bin/arch`
  32. RC_CFLAGS = -arch `/usr/bin/arch`
  33.  
  34. # Directory for .o files (can be thrown away) 
  35. OFILE_DIR = $(OBJROOT)/$(ARCH_LIST)obj
  36. # Directory for all other derived files (contains symbol info. for debugging)
  37. SYM_DIR = $(SYMROOT)/sym
  38. # For compatibility:
  39. DERIVED_DIR = $(OFILE_DIR)
  40. DERIVED_SRC_DIR = $(SYM_DIR)
  41.  
  42. $(OFILE_DIR) $(SYM_DIR):
  43.     @$(MKDIRS) $@
  44.  
  45. MSGOFILES = $(MSGFILES:.msg=Speaker.o) $(MSGFILES:.msg=Listener.o)
  46. MSGDERIVEDMFILES = $(MSGFILES:.msg=Speaker.m) $(MSGFILES:.msg=Listener.m)
  47.  
  48. ALLMIGFILES = $(MIGFILES) $(DEFSFILES)
  49.  
  50. MIGOFILES = $(MIGFILES:.mig=User.o) $(MIGFILES:.mig=Server.o)
  51. DEFSOFILES = $(DEFSFILES:.defs=User.o) $(DEFSFILES:.defs=Server.o)
  52. ALLMIGOFILES = $(MIGOFILES) $(DEFSOFILES)
  53.  
  54. MIGDERIVEDCFILES = $(MIGFILES:.mig=User.c) $(MIGFILES:.mig=Server.c)
  55. DEFSDERIVEDCFILES = $(DEFSFILES:.defs=User.c) $(DEFSFILES:.defs=Server.c)
  56. ALLMIGDERIVEDCFILES = $(MIGDERIVEDCFILES) $(DEFSDERIVEDCFILES)
  57.  
  58. EARLY_OFILES = $(PSWFILES:.psw=.o) $(PSWMFILES:.pswm=.o)
  59.  
  60. INITIAL_TARGETS = $(OFILE_DIR) $(SYM_DIR) $(EARLY_OFILES) $(MSGOFILES) $(ALLMIGOFILES) $(PRECOMPS) $(OTHER_INITIAL_TARGETS)
  61.  
  62. SUBPROJ_OFILES = $(SUBPROJECTS:.subproj=_subproj.o)
  63. OFILES = $(SUBPROJ_OFILES) $(CLASSES:.m=.o) $(MFILES:.m=.o) $(CFILES:.c=.o) \
  64.     $(CCFILES:.cc=.o) $(CAPCFILES:.C=.o) $(CXXFILES:.cxx=.o) \
  65.     $(CPPFILES:.cpp=.o) $(EARLY_OFILES) $(OTHERLINKEDOFILES) 
  66. #    Note: It would be nice to put $(OTHERRELOCATABLES) in this list someday
  67. #          when PB provides full paths for the contents of this variable.
  68.  
  69. # Derived resources:
  70. DBMODELS = $(DBMODELAFILES:.dbmodela=.dbmodel)
  71.  
  72. HELP_DIRS = Help
  73. HELP_STORES = $(HELP_DIRS:=.store) $(OTHER_HELP_DIRS:=.store)
  74.  
  75. ### Set defaults for many values used throughout the app Makefiles
  76.  
  77. # Default extension for bundles (directories containing object code and resources)
  78. BUNDLE_EXTENSION = .bundle
  79.  
  80. MAKEFILES = Makefile
  81.  
  82. PRODUCT_DEPENDS = $(OFILES) $(OTHER_OFILES) $(DBMODELS) \
  83.     $(ICONHEADER) $(APPICON) $(DOCICONS) $(MAKEFILES) \
  84.     $(OTHER_PRODUCT_DEPENDS)
  85.  
  86. GARBAGE = $(PSWFILES:.psw=.c) $(PSWMFILES:.pswm=.m) \
  87.     $(PSWFILES:.psw=.h) $(PSWMFILES:.pswm=.m) \
  88.     $(SYMROOT)/$(NAME).app $(SYMROOT)/$(NAME).debug \
  89.     $(SYMROOT)/$(NAME).profile $(SYMROOT)/$(NAME).bundle \
  90.     $(SYMROOT)/$(NAME) $(SYMROOT)/$(NAME).palette \
  91.     $(OBJROOT)/*obj $(OBJROOT)/*debug_obj $(OBJROOT)/*profile_obj \
  92.     $(SYM_DIR) *~ $(LANGUAGE).lproj/*~ \
  93.     Makefile.dependencies $(OTHER_GARBAGE) gmon.out \
  94.     $(PRECOMPS) $(OTHER_INITIAL_TARGETS)
  95.  
  96. # Default name for file to use as "reference time of last build"
  97. CHANGES_FILE = .lastBuildTime
  98.  
  99. # Defaults for who to chown executables to when installing
  100. INSTALL_AS_USER = root
  101. INSTALL_AS_GROUP = wheel
  102.  
  103. # Default compiler options
  104. OPTIMIZATION_CFLAG = -O
  105. NORMAL_CFLAGS = -g $(OPTIMIZATION_CFLAG) -Wall
  106. DEBUG_CFLAGS = -g -Wall -DDEBUG
  107. PROFILE_CFLAGS = -g -pg $(OPTIMIZATION_CFLAG) -Wall -DPROFILE
  108. C++CFLAGS = -D__cplusplus
  109.  
  110. # Defaults strip options
  111. RELOCATABLE_STRIP_OPTS = -x -u
  112. DYLD_APP_STRIP_OPTS = -A -n
  113. APP_STRIP_OPTS =   # Set this to $(DYLD_APP_STRIP_OPTS) when doing dynaloading yourself
  114.  
  115. # Various commands:
  116. SHELL  = /bin/sh
  117. FASTCP = /usr/lib/fastcp
  118. CHANGES = /usr/lib/changes
  119. CHOWN  = /etc/chown
  120. CHMOD  = /bin/chmod
  121. TAR    = /bin/tar
  122. STRIP  = /bin/strip
  123. RM     = /bin/rm
  124. LN     = /bin/ln
  125. ECHO   = /bin/echo
  126. MKDIRS = /bin/mkdirs
  127. TOUCH  = /usr/bin/touch
  128. AWK    = /bin/awk
  129. PSWRAP = /usr/bin/pswrap
  130. MSGWRAP = /usr/bin/msgwrap
  131. MIG    = /usr/bin/mig
  132. DBC    = /NextDeveloper/Apps/DBModeler.app/dbcompiler
  133. COMPRESSHELP = /usr/bin/compresshelp
  134.  
  135. ADAPTOR_SEARCH_PATH = $(HOME)/Library/Adaptors /LocalLibrary/Adaptors /NextLibrary/Adaptors
  136.  
  137. # Set VPATH via a variable so clients of common.make can reuse it when overriding VPATH
  138. NORMAL_VPATH = $(OFILE_DIR):$(SYM_DIR):$(LANGUAGE).lproj:$(PRODUCT_ROOT)
  139. VPATH = $(VPATH_PREAMBLE)$(NORMAL_VPATH)$(VPATH_POSTAMBLE)
  140.  
  141.  
  142. ### Use a set of basic suffix-style rules:
  143.  
  144. COMMON_APP_MAKEFILE_DIR = /NextDeveloper/Makefiles/app
  145. include $(COMMON_APP_MAKEFILE_DIR)/basicrules.make
  146.  
  147.  
  148. ### Define all the targets necessary at every level of the project-hierarchy:
  149.  
  150. # The following 2 rules do the recursion into subprojects and 
  151. # bundles of this (sub)project and does a 'make project' for each one in its
  152. # respective directories.  This insures that we do not rely on the directory
  153. # timestamp or "hacK" file to know whether or not something has changed.  
  154.  
  155. subprojs $(SUBPROJ_OFILES):
  156.     @(targets=`$(CHANGES) $(PRODUCT_ROOT)/$(CHANGES_FILE) "$(OFILE_DIR)" $(SUBPROJECTS)`;\
  157.     for ofile in $(SUBPROJ_OFILES) none ; do \
  158.        if [ $$ofile = "none" ] ; then break; fi ; \
  159.        if [ ! -f $(OFILE_DIR)/$$ofile ] ; then \
  160.           targets="$(SUBPROJECTS)" ; break; \
  161.        fi ; \
  162.     done ; \
  163.     if [ "$(OBJROOT)" = "$(SRCROOT)" ] ; then \
  164.        prod_root="../$(PRODUCT_ROOT)" ;\
  165.        ofile_dir="../$(OFILE_DIR)" ;\
  166.        sym_dir="../$(SYM_DIR)" ;\
  167.     else \
  168.        prod_root="$(PRODUCT_ROOT)" ; \
  169.        ofile_dir="$(OFILE_DIR)" ;\
  170.        sym_dir="$(SYM_DIR)" ;\
  171.     fi ;\
  172.     for sub in $$targets none ; do \
  173.        if [ $$sub = "none" ] ; then break; fi ;\
  174.        cd $$sub; $(ECHO) Making $$sub ; \
  175.        $(MAKE) project "NAME = $$sub" \
  176.                   "PRODUCT_ROOT = $$prod_root" \
  177.                "OFILE_DIR = $$ofile_dir/$$sub" \
  178.                "SUBPROJ_OFILE_DIR = $$ofile_dir" \
  179.                "SYM_DIR = $$sym_dir/$$sub" \
  180.                "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
  181.                "SRCROOT = $(SRCROOT)" \
  182.                "OBJROOT = $(OBJROOT)" \
  183.                "SYMROOT = $(SYMROOT)" \
  184.                "PROJ_CFLAGS = $(CFLAGS) -I$$sym_dir $(PROJ_CFLAGS) $(OTHER_CFLAGS)" \
  185.                "RC_CFLAGS = $(RC_CFLAGS)" ; \
  186.        cd .. ; $(ECHO) Finished making $$sub ; \
  187.     done )
  188.  
  189. bundles:
  190.     @(targets=`$(CHANGES) $(PRODUCT_ROOT)/$(CHANGES_FILE) "$(OFILE_DIR)" $(BUNDLES)` ; \
  191.     if [ "$(OBJROOT)" = "$(SRCROOT)" ] ; then \
  192.        prod_root="../$(PRODUCT_ROOT)" ;\
  193.        ofile_dir="../$(OFILE_DIR)" ;\
  194.        sym_dir="../$(SYM_DIR)" ;\
  195.     else \
  196.        prod_root="$(PRODUCT_ROOT)" ; \
  197.        ofile_dir="$(OFILE_DIR)" ;\
  198.        sym_dir="$(SYM_DIR)" ;\
  199.     fi ;\
  200.     for bun in $$targets none ; do \
  201.        if [ $$bun = "none" ] ; then break; fi ; \
  202.        cd $$bun; $(ECHO) Making $$bun ; \
  203.        $(MAKE) project "NAME = $$bun" \
  204.                        "BUNDLE_DIR = $$prod_root/$$bun" \
  205.                        "REL_BUNDLE_DIR = $$bun" \
  206.                "OFILE_DIR = $$ofile_dir/$$bun" \
  207.                "SYM_DIR = $$sym_dir/$$bun" \
  208.                "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
  209.                "SRCROOT = $(SRCROOT)" \
  210.                "OBJROOT = $(OBJROOT)" \
  211.                "SYMROOT = $(SYMROOT)" \
  212.                "PROJ_CFLAGS = $(CFLAGS) -I$$sym_dir $(PROJ_CFLAGS) $(OTHER_CFLAGS)" \
  213.                "RC_CFLAGS = $(RC_CFLAGS)" ; \
  214.        cd .. ; $(ECHO) Finished making $$bun ; \
  215.     done )
  216.  
  217. # The following rule actually insures that resources for this particular level in the project hierarchy get copied over to the appropriate place in the PRODUCT_ROOT.  Note that we depend on VPATH including $(LANGUAGE).lproj so that the LOCAL_RESOURCES are found correctly.  FASTCP is used to minimize the copying of files, since most resources are likely to be up to date most of the time.
  218.  
  219. resources:: $(LOCAL_RESOURCES) $(GLOBAL_RESOURCES) $(HELP_STORES) $(OTHER_RESOURCES)
  220.     @($(MKDIRS) $(PRODUCT_ROOT)/$(LANGUAGE).lproj ; \
  221.     if [ "$(LOCAL_RESOURCES)" != "" ] ; then \
  222.        locals="" ; \
  223.        for resource in $(LOCAL_RESOURCES) none ; do   \
  224.           insert="true"; \
  225.           for helpdir in $(HELP_DIRS) $(OTHER_HELP_DIRS) none ; do \
  226.              if [ "$$resource" = "$$helpdir" ] ; \
  227.                then insert="false"; \
  228.          fi ; \
  229.           done ; \
  230.           if [ "$$insert" = "true" ] ; then \
  231.              locals="$$locals $$resource" ; \
  232.           fi ; \
  233.        done ; \
  234.        $(FASTCP) $$locals $(PRODUCT_ROOT)/$(LANGUAGE).lproj ; \
  235.     fi ; \
  236.     if [ "$(GLOBAL_RESOURCES)" != "" ] ; then \
  237.        $(FASTCP) $(GLOBAL_RESOURCES) $(PRODUCT_ROOT) ; \
  238.     fi )
  239.  
  240.  
  241. # rules for copying, cleaning and making dependencies
  242.  
  243. .bproj.copy:
  244.     @(cd $*.bproj; $(MAKE) copy "NAME=$*" "DEST=$(DEST)/$*.bproj")
  245. .subproj.copy:
  246.     @(cd $*.subproj; $(MAKE) copy "NAME=$*" "DEST=$(DEST)/$*.subproj")
  247.  
  248. .bproj.clean:
  249.     (cd $*.bproj; $(MAKE) clean "NAME=$*" "DEST=$(DEST)/$*.bproj")
  250. .subproj.clean:
  251.     (cd $*.subproj; $(MAKE) clean "NAME=$*" "DEST=$(DEST)/$*.subproj")
  252.  
  253. .bproj.depend:
  254.     (if [ $(SYMROOT) = $(SRCROOT) ] ; then \
  255.        sym_dir="../$(SYM_DIR)" ;\
  256.     else \
  257.        sym_dir="$(SYM_DIR)" ;\
  258.     fi ;\
  259.     cd $*.bproj; \
  260.     $(MAKE) depend "NAME=$*" "PROJ_CFLAGS = $(CFLAGS) $(PROJ_CFLAGS) $(OTHER_CFLAGS) -I$$sym_dir/$*.bproj" )
  261. .subproj.depend:
  262.     (cd $*.subproj; \
  263.     $(MAKE) depend "NAME=$*" "PROJ_CFLAGS = $(CFLAGS) $(PROJ_CFLAGS) $(OTHER_CFLAGS) -I$$sym_dir/$*.subproj")
  264.  
  265. SRCROOT DEST:
  266.     @if [ -n "${$@}" ]; then exit 0; \
  267.     else $(ECHO) Must define $@; exit 1; fi
  268.  
  269. $(DEST)::
  270.     -$(RM) -rf $(DEST)
  271.     @$(MKDIRS) $(DEST)
  272.  
  273. $(NAME).copy:: DEST $(DEST) $(SRCFILES)
  274.     @(if [ "$(SRCFILES)" != "" ] ; then \
  275.            $(ECHO) "$(TAR) chf - $(SRCFILES) | (cd $(DEST); $(TAR) xf -)" ; \
  276.            $(TAR) chf - $(SRCFILES) | (cd $(DEST); $(TAR) xf -) ; \
  277.     fi ; \
  278.     $(MKDIRS) $(DEST)/$(LANGUAGE).lproj ; \
  279.     if [ "$(LOCAL_RESOURCES)" != "" ] ; then \
  280.        $(ECHO) "(cd $(LANGUAGE).lproj; $(TAR) chf - $(LOCAL_RESOURCES)) | (cd $(DEST)/$(LANGUAGE).lproj; $(TAR) xf - )" ; \
  281.        (cd $(LANGUAGE).lproj; $(TAR) chf - $(LOCAL_RESOURCES)) | (cd $(DEST)/$(LANGUAGE).lproj; $(TAR) xf -) ; \
  282.     fi ; \
  283.     supportfiles="" ; \
  284.     for i in $(SUPPORTFILES) $(APPICON) $(DOCICONS) none ; do \
  285.         if [ -r $$i -a ! -r $(DEST)/$$i ] ; then \
  286.         supportfiles="$$supportfiles $$i" ; \
  287.         fi ; \
  288.     done ; \
  289.     if [ "$$supportfiles" != "" ] ; then \
  290.        $(ECHO) "$(TAR) chf - $$supportfiles | (cd $(DEST); $(TAR) xf -)" ; \
  291.        $(TAR) chf - $$supportfiles | (cd $(DEST); $(TAR) xf -) ; \
  292.     fi)
  293.  
  294. $(NAME).clean::
  295.     @if [ ! -w . ] ; then $(ECHO) '***' project write-protected; exit 1 ; fi
  296.     $(RM) -rf $(GARBAGE)
  297.  
  298.  
  299. # Build a set of dependencies for current level into Makefile.dependencies 
  300.    
  301. Makefile.dependencies:: $(CLASSES) $(MFILES) $(CFILES) $(CCFILES) $(CAPCFILES) $(CXXFILES) $(CPPFILES)
  302.     $(RM) -f Makefile.dependencies 
  303.     $(CC) -MM $(ALL_CFLAGS) $(CLASSES) $(MFILES) $(CFILES) \
  304.                 $(CCFILES) $(CAPCFILES) $(CXXFILES) $(CPPFILES) \
  305.        >  Makefile.dependencies
  306.         
  307.  
  308. copy:: $(NAME).copy $(BUNDLES:.bproj=.copy) $(SUBPROJECTS:.subproj=.copy)
  309.  
  310. writable::
  311.     @chmod -R +w *
  312.  
  313. protected::
  314.     @chmod -R a-w *
  315.  
  316. installsrc:: SRCROOT
  317.     @($(MAKE) copy "DEST=$(SRCROOT)")
  318.  
  319. installhdrs::
  320.  
  321. clean:: $(NAME).clean  $(BUNDLES:.bproj=.clean) $(SUBPROJECTS:.subproj=.clean)
  322.  
  323.  
  324.  
  325.  
  326.